package com.shenfa.service.systemManager;

import java.util.*;
import java.util.Map.Entry;
import java.util.TreeMap;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

import com.shenfa.bean.Function;
import com.shenfa.bean.TreeNode;
import com.shenfa.bean.TreeNodeCheck;
import com.shenfa.dao.systemManager.function.FunctionDao;
import com.shenfa.dao.systemManager.role.RoleDao;

public class SystemService {
	private static final Logger log = Logger.getLogger(SystemService.class);

	@Autowired
	private FunctionDao functionDao;
	@Autowired
	private RoleDao roleDao;
	
	/**
	 * 查询所有功能菜单列表
	 * @return
	 */
	public List<Function> getAllFunctionList(){
		return functionDao.getList(new Function(),0,1000);
	}
	/**
	 * 查询角色功能菜单树
	 * @return
	 */
	public List<TreeNodeCheck> getListByRolePid(String roleid){
		//查询所有功能列表
		List<Function> funcList=functionDao.getList(new Function(),0,1000);
		//查询角色功能
		List<String> roleList=roleDao.qurfuncbyrole(roleid);
		//返回的树集合
		List<TreeNodeCheck> funcCheckList=new ArrayList<TreeNodeCheck>();
		//取出功能ID
		Map<String,String> map=new TreeMap<String,String>();
		for(String s:roleList){
			map.put(s, s);
		}

		//临时对象
		Map<String,TreeNodeCheck> tempMap=new TreeMap<String,TreeNodeCheck>();
		
		TreeNodeCheck tnc;
		String funcid="";
		
		//构造返回树
		for(Function c:funcList){
			tnc=new TreeNodeCheck();
			funcid=c.getId();
			tnc.setId(funcid);//设置功能ID
			tnc.setText(c.getName());//设置功能名
			//如果功能id存在
			if(map.containsKey(funcid)){
				tnc.setChecked(true);
			}
			//如果为根节点
			if("0".equals(c.getParent())){
				List<TreeNodeCheck> tempList=new ArrayList<TreeNodeCheck>();
				tnc.setChildren(tempList);
				tempMap.put(funcid,tnc);
			}else{
				tnc.setLeaf(false);
				tempMap.get(c.getParent()).getChildren().add(tnc);
			}
		}
		//获取要返回的树
		for(Entry<String, TreeNodeCheck> en: tempMap.entrySet()){
			funcCheckList.add(en.getValue());
		}
		return funcCheckList;
	}
	public List<Function> getMenuListByCurrentPerson(String id) {
		List<Function> list = new ArrayList<Function>();
		//获取该用户的所有角色ID
		List<String> roleList = roleDao.getRoleIdListByPersonId(id);
		List<String> functionList;
		//循环该用户的角色
		for (String roleId : roleList) {
			//获取角色下所有权限功能ID
			functionList = functionDao.getFunctionIdByRoleId(roleId);
			//根据功能权限对象
			list= functionDao.getbylist(functionList);
		}
		return list;
	}
	
	/**
	 * 根据父节点查询功能列表
	 * 
	 * @author yanglong
	 * 
	 * @param node	父节点ID
	 * 
	 * @return	功能列表
	 */
	public List<TreeNode> getTree(String node) {
		List<TreeNode> list = functionDao.getTree(node);
		return list;
	}
	
	/**
	 * 获取功能列表
	 * 
	 * @author yanglong
	 * 
	 * @param parent	父节点
	 * 
	 * @return	功能列表
	 */
	public List<Function> getList(Function parent) {
		return functionDao.getListByParent(parent);
	}
	
	/**
	 * 添加功能
	 * 
	 * @author yanglong
	 * @return
	 */
	public int add(Function func){
		return functionDao.add(func);
	}
	
	/**
	 * 删除功能
	 * 
	 * @author yanglong
	 * @return
	 */
	public int del(Function func){
		return functionDao.del(func);
	}
	
}
